import java.util.*;

public class PairSums {
  private List<List<Integer>> pairSums(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    List<List<Integer>> list = new ArrayList<>();
    for(int i = 0; i<nums.length; i++){
      map.put(nums[i], map.getOrDefault(nums[i], 0)+1);
      if(map.containsKey(target-nums[i])){
        List<Integer> pair = new ArrayList<>();
        pair.add(target-nums[i]);
        pair.add(nums[i]);
        list.add(pair);
        map.put(nums[i], map.get(nums[i])-1);
        map.put(target-nums[i], map.get(target-nums[i])-1);
        if(map.get(nums[i])<=0){
          map.remove(nums[i]);
        }
        if(map.get(target-nums[i])<=0){
          map.remove(target-nums[i]);
        }
      }
    }
    return list;
  }

  public static void main(String[] args) {
    PairSums ps = new PairSums();
    int[] nums = {1, 2, 3, 4, 5, 2};
    int target = 5;
    System.out.println(ps.pairSums(nums, target));
  }
}
